package com.king.volatiletest;

/**
 * @author taomk
 * @version 1.0
 * @since 15-2-10 下午9:54
 */
public class Main {

	public static void main(String [] args) throws Exception {
		testVolatile();
	}

	/**
	 * 如果使用-client模式运行这段代码，无论是否使用volatile，其运行效果都是一样
	 * 的，MyThread总是会发现stop状态的修改（会发现修改，但不是即时的）。
	 * -server模式下有这样明显的区别是因为在该模式下，JVM会对代码做一些优化，
	 * 使得优化后的代码不再去读取未曾发生改变的，且未标记为volatile的stop变量，
	 * 使得在-server模式下，该变量的修改线程间不可见。
	 * @throws Exception
	 */
	public static void testVolatile() throws Exception {
		MyThread t = new MyThread();
		t.start();
		Thread.sleep(1000);
		t.stopMe();
		Thread.sleep(1000);
	}
}
